package cn.stylefeng.guns.modular.gridsystem.service;

import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.gridsystem.entity.BizGateway;
import cn.stylefeng.guns.modular.gridsystem.model.param.ApplicationRecordParam;
import cn.stylefeng.guns.modular.gridsystem.model.param.BizGatewayParam;
import cn.stylefeng.guns.modular.gridsystem.model.param.GatewayImportParam;
import cn.stylefeng.guns.modular.gridsystem.model.result.BizGatewayResult;
import cn.stylefeng.guns.modular.gridsystem.model.result.DeviceStatusNumberResult;
import cn.stylefeng.guns.modular.gridsystem.model.result.GatewayGrantInfoResult;
import cn.stylefeng.guns.modular.gridsystem.model.result.GatewayResult;
import cn.stylefeng.guns.modular.gridsystem.mqtt.result.GatewayChannelStatus;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 采集设备 服务类
 *
 * @author ssy
 * @date 2021/09/14 11:47
 */
public interface BizGatewayService extends IService<BizGateway> {

    /**
     * 分页查询采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    PageResult<BizGatewayResult> page(BizGatewayParam bizGatewayParam);

    /**
     * 分页查询采集设备(配置向导)
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    PageResult<BizGatewayResult> guidePage(BizGatewayParam bizGatewayParam);

    /**
     * 查询所有采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    List<GatewayResult> list(BizGatewayParam bizGatewayParam);


    /**
     * 查询所有已绑定站点的网关
     *
     * @author zxw
     */
    List<BizGateway> listAll(BizGatewayParam param);

    /**
     * 查询未申请授权或授权已过期的网关
     *
     * @param param 查询参数
     * @return
     */
    List<BizGatewayResult> listNoGrant(BizGatewayParam param);

    /**
     * 添加采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    void add(BizGatewayParam bizGatewayParam);

    /**
     * 添加网关
     *
     * @param param 请求参数
     * @author zxw 2022-11-21 14:55
     */
    void addGateway(BizGatewayParam param);

    /**
     * 删除采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    void delete(BizGatewayParam bizGatewayParam);

    /**
     * 编辑采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    void edit(BizGatewayParam bizGatewayParam);

    /**
     * 配置向导编辑网关
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    void editGateway(BizGatewayParam param);

    /**
     * 查看详情采集设备
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    BizGatewayParam detail(BizGatewayParam bizGatewayParam);

    /**
     * 修改状态（字典 0正常 1停用 2删除）
     *
     * @author ssy
     * @date 2021/09/14 11:47
     */
    void changeStatus(BizGatewayParam bizGatewayParam);

    int getCountByGatewayCode(String gatewayCode);

    BizGateway listByDeviceCode(String deviceCode);

    void editByGatewayCode(String deviceCode);

    BizGateway gatewayByGatewayCode(BizGatewayParam bizGatewayParam);

    List<BizGateway> offDutyList();

    List<BizGatewayResult> getListAndChannel(LambdaQueryWrapper<BizGateway> queryWrapper);

    //获取网关和通道状态信息
    List<GatewayChannelStatus> getGatewayChannelStatus();

    void changeSwitch(BizGatewayParam bizGatewayParam);

    /**
     * 批量操作数据上报开关
     *
     * @param param 请求参数
     */
    void batchChangeDataReportStatus(BizGatewayParam param);

    PageResult<BizGateway> initGatewayPage(BizGatewayParam bizGatewayParam);

    /**
     * 查询配置参数
     *
     * @param param 查询参数
     * @return
     */
    Map<String, Object> getConfig(BizGatewayParam param);

    /**
     * 更新配置参数
     *
     * @param cfg
     */
    void updateConfig(Map<String, Object> cfg);

    /**
     * 导入网关
     *
     * @param param
     * @return
     */
    String importGateway(GatewayImportParam param);

    /**
     * 查询授权信息
     *
     * @return
     */

    GatewayGrantInfoResult queryGrantInfo();

    /**
     * 周步网关授权状态
     */
    void syncGatewayGrant();

    /**
     * 批量添加设备申请
     *
     * @param param 请求参数
     */
    void batchAddApplicationRecord(ApplicationRecordParam param);


    DeviceStatusNumberResult getDeviceOnlineNumber(Integer stationId);

}
